package in.lib.manager;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import in.data.TSerializable;
import in.lib.utils.Debug;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
public class CacheManager
{
@Getter @Setter private static String cachePath = "";
private static CacheManager instance;
public static CacheManager getInstance()
{
if (instance == null)
{
synchronized (CacheManager.class)
{
if (instance == null)
{
instance = new CacheManager();
}
}
}
return instance;
}
public long getFileAge(String fileName)
{
return System.currentTimeMillis() - new File(cachePath, fileName).lastModified();
}
public boolean fileExists(String fileName)
{
return new File(cachePath, fileName).exists();
}
public boolean fileExists(String path, String fileName)
{
return new File(path, fileName).exists();
}
public boolean removeFile(String fileName)
{
return removeFile(cachePath, fileName);
}
public boolean removeFile(String folderPath, String fileName)
{
File f = new File(folderPath + "/" + fileName);
return f.delete();
}
public void writeFile(String fileName, TSerializable object)
{
writeFile(cachePath, fileName, object);
}
public void writeFile(String folderPath, String fileName, TSerializable object)
{
try
{
RandomAccessFile file = new RandomAccessFile(folderPath + "/" + fileName, "rw");
FileOutputStream fos = new FileOutputStream(file.getFD());
BufferedOutputStream bos = new BufferedOutputStream(fos, 1024 * 8);
DataOutputStream dos = new DataOutputStream(bos);
object.writeToBuffer(dos);
bos.flush();
fos.close();
dos.close();
bos.close();
file.close();
}
catch (Exception e)
{
Debug.out(e);
}
}
public <T extends TSerializable> T readFile(String fileName, @NonNull Class<T> cls)
{
return readFile(cachePath, fileName, cls);
}
public <T extends TSerializable> T readFile(String fileName, @NonNull T object)
{
return readFile(cachePath, fileName, object);
}
public <T extends TSerializable> T readFile(String folderPath, String fileName, @NonNull Class<T> cls)
{
try
{
T data = cls.newInstance();
return readFile(folderPath, fileName, data);
}
catch (InstantiationException e)
{
Debug.out(e);
}
catch (IllegalAccessException e)
{
Debug.out(e);
}
return null;
}
public <T extends TSerializable> T readFile(String folderPath, String fileName, @NonNull T object)
{
if (fileExists(folderPath, fileName))
{
try
{
RandomAccessFile file = new RandomAccessFile(cachePath + "/" + fileName, "rw");
FileInputStream fis = new FileInputStream(file.getFD());
BufferedInputStream bis = new BufferedInputStream(fis, 1024 * 8);
DataInputStream dis = new DataInputStream(bis);
object.readFromBuffer(dis);
fis.close();
dis.close();
bis.close();
file.close();
return object;
}
catch (Exception e)
{
Debug.out(e);
}
}
return null;
}
}